home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Languguage OS 2
/
Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO
/
language
/
embedded
/
mcu11
/
examples.arc
/
EX3
< prev
next >
Wrap
Text File
|
1988-11-29
|
3KB
|
56 lines
***********************************************************************
* Example 3-1 ~ 65 bytes total *
* *
* This example program uses the hardware setup in figure 3-1 in test *
* mode. After reset the CONFIG register is checked against port E. *
* If it is different, CONFIG is erased and reprogrammed to the port E *
* value. $30 is written to port A and the program ends. *
***********************************************************************
ORG $A000 Start of external EPROM
EX31A LDS #$00FF Establish top of stack
BSR DLY10 Allow charge pump to stabilize
LDAA $100A Read port E DIP switches
ANDA $#0F Mask off upper 4 bits (not implimented on 'A8)
CMPA $103F See if CONFIG is same
BNE NOWOK If already OK
* Not OK so first erase CONFIG
LDAB #$06 Bulk Erase, and EELAT on
STAB $103B Write to PPROG register
STAA $103F Write to CONFIG address (any data)
INCB To $07 - turns on EEPGM bit
STAB $103B Write to PPROG register
BSR DLY10 Delay 10 mS for erase to complete
CLR $103B Turn off charge pump (EEPGM to 0)
* Now reprogram CONFIG with data from port E (still in A-reg)
LDAB #$02 Turn on EELAT
STAB $103B Write to PPROG register
STAA $103F Write port E data to CONFIG address
INCB To $03 - Turns on EEPGM bit
STAB $103B Write to PPROG register
BSR DLY10 Delay 10 mS for erase to complete
CLR $103B Turn off charge pump (EEPGM to 0)
* Programming complete but you can't check results till next reset
NOWOK LDA #$30
STAA $1000 You are done (check with scope)
BRA * Branch to self (hangs till pwr off or rst)
*
* PROGRAM END subroutines follow
*
***
* DLY10 - Subroutine to delay 10mS (for E=2MHz)
***
DLY10 PSHX Save X (not required in this ex I just do)
LDX #$0D06 3334 * 6~ * 500nS/~ = 10mS
DLOOP DEX [3] # in []s is cycles for that instruc
BNE DLOOP [3] cont. for 3334 times (loop time = 6~)
PULX Recover X value
RTS ** RETURN **
*
* Establish a reset vector
*
ORG $BFFE
RESET FDB $A000 Point to start of program